package org.xx.armory.oss;

import org.springframework.security.core.Authentication;

/**
 * OBS 授权类。
 */
public interface OssAuthorization {
    /**
     * 是否允许上传文件。
     *
     * @param root
     *         文件的基础分类。
     * @param objId
     *         关联对象的ID。
     * @param objType
     *         文件类型。
     * @param fileName
     *         文件名（不包含路径信息）。
     * @param fileSize
     *         文件大小。
     * @param token
     *         登录令牌。
     * @return 是否允许上传。
     */
    boolean allowUpload(
            String root,
            long objId,
            int objType,
            String fileName,
            long fileSize,
            Authentication token
    );

    /**
     * 获取文件列表。
     *
     * @param root
     *         文件的基础分类。
     * @param objId
     *         关联对象的ID。
     * @param objType
     *         文件类型。
     * @param token
     *         登录令牌。
     * @return 是否允许获取文件列表。
     */
    boolean allowList(
            String root,
            long objId,
            int objType,
            Authentication token
    );

    /**
     * 删除文件。
     *
     * @param root
     *         文件的基础分类。
     * @param objId
     *         关联对象的ID。
     * @param objType
     *         文件类型。
     * @param fileName
     *         文件名（不包含路径信息）。
     * @param token
     *         登录令牌。
     * @return 是否允许删除文件。
     */
    boolean allowDelete(
            String root,
            long objId,
            int objType,
            String fileName,
            Authentication token
    );

    /**
     * 下载文件。
     *
     * @param root
     *         文件的基础分类。
     * @param objId
     *         关联对象的ID。
     * @param objType
     *         文件类型。
     * @param fileName
     *         文件名（不包含路径信息）。
     * @param token
     *         登录令牌。
     * @return 是否允许下载文件。
     */
    boolean allowDownload(
            String root,
            long objId,
            int objType,
            String fileName,
            Authentication token
    );
}
